package ar.edu.unq.edp.futbol.mains;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

import unq.equipos.dom.Equipo;
import unq.equipos.dom.Formacion;
import unq.equipos.dom.FormacionStrategy;
import unq.equipos.dom.FormacionStrategyImpl;
import unq.equipos.dom.Habilidad;
import unq.equipos.dom.HabilidadImpl;
import unq.equipos.dom.Jugador;
import unq.equipos.dom.Posicion;


public class InsertFormacionBasic {
	

	public static void main(String[] args) {

		Jugador jugador2, jugador3, jugador4, jugador5, jugador6, jugador7, jugador8, jugador9, jugador10, jugador11, jugador12;
		Habilidad habilidadLateral2, habilidadCentral2, habilidadVolanteLateral2, habilidadArqueroPro, habilidadArqueroMedioPelo, habilidadLateral, habilidadCentral, habilidadVolanteDefensivo, habilidadVolanteLateral, habilidadEnganche, habilidadDelantero, habilidadMediaPunta;
		Equipo equipo;

		// Esta instancia es thread safe
		SessionFactory sessionFactory = new Configuration().configure()
				.buildSessionFactory();

		// esta ya no es threadSafe
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();

		habilidadLateral2 = new HabilidadImpl(Posicion.Lateral, 5);
		habilidadCentral2 = new HabilidadImpl(Posicion.Central, 5);
		habilidadVolanteLateral2 = new HabilidadImpl(Posicion.Lateral, 5);
		habilidadArqueroMedioPelo = new HabilidadImpl(Posicion.Arquero, 1);
		habilidadLateral = new HabilidadImpl(Posicion.Lateral, 9);
		habilidadCentral = new HabilidadImpl(Posicion.Central, 9);
		habilidadVolanteDefensivo = new HabilidadImpl(
				Posicion.VolanteDefensivo, 9);
		habilidadVolanteLateral = new HabilidadImpl(Posicion.VolanteLateral, 9);
		habilidadEnganche = new HabilidadImpl(Posicion.Enganche, 9);
		habilidadDelantero = new HabilidadImpl(Posicion.Delantero, 9);
		habilidadMediaPunta = new HabilidadImpl(Posicion.MediaPunta, 9);

		jugador2 = new Jugador("a");
		jugador2.agregarHabilidad(habilidadArqueroMedioPelo);
		jugador3 = new Jugador("b");
		jugador3.agregarHabilidad(habilidadLateral);
		jugador4 = new Jugador("c");
		jugador4.agregarHabilidad(habilidadLateral2);
		jugador5 = new Jugador("d");
		jugador5.agregarHabilidad(habilidadCentral);
		jugador6 = new Jugador("e");
		jugador6.agregarHabilidad(habilidadCentral2);
		jugador7 = new Jugador("f");
		jugador7.agregarHabilidad(habilidadVolanteDefensivo);
		jugador8 = new Jugador("g");
		jugador8.agregarHabilidad(habilidadVolanteLateral);
		jugador9 = new Jugador("h");
		jugador9.agregarHabilidad(habilidadVolanteLateral2);
		jugador10 = new Jugador("i");
		jugador10.agregarHabilidad(habilidadEnganche);
		jugador11 = new Jugador("j");
		jugador11.agregarHabilidad(habilidadDelantero);
		jugador12 = new Jugador("k");
		jugador12.agregarHabilidad(habilidadMediaPunta);

		equipo = new Equipo("wasd");
		equipo.agregarJugador(jugador2, jugador3, jugador4, jugador5, jugador6,
				jugador7, jugador8, jugador9, jugador10, jugador11, jugador12);
		List<Posicion> posiciones = new ArrayList<Posicion>();
		posiciones.add(Posicion.Arquero);
		posiciones.add(Posicion.Lateral);
		posiciones.add(Posicion.Lateral);
		posiciones.add(Posicion.Central);
		posiciones.add(Posicion.Central);
		posiciones.add(Posicion.VolanteDefensivo);
		posiciones.add(Posicion.VolanteLateral);
		posiciones.add(Posicion.VolanteLateral);
		posiciones.add(Posicion.Enganche);
		posiciones.add(Posicion.Delantero);
		posiciones.add(Posicion.MediaPunta);
		
		
		FormacionStrategy f = new FormacionStrategyImpl(posiciones);
		Formacion form = f.armarFormacion(equipo);

		try {
			session.save(form);
			transaction.commit();
		} catch (RuntimeException e) {
			transaction.rollback();
			throw e;
		} finally {
			session.close();
		}

	}

}
